#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    //打开文件

    //打开一个读文件
    int fd_read =  open("lift.txt",O_RDONLY);
    if(fd_read == -1)
    {
        perror("可读文件打开失败");
        exit(EXIT_FAILURE);
    }
    //打开一个写文件 配成自动创建 可以最佳写mote   权限最大
    int fd_write = open("last_lift.txt",O_CREAT|O_WRONLY|O_APPEND, 0664);
    if(fd_write == -1)
    {
        perror("追加写文件打开失败");
        exit(EXIT_FAILURE);
    }


    //把lift文件读取 并且写道lift2  并且打印到控制台
    char buff[150] = {0};
    ssize_t length = 0;
    //当检测到小于0或等于0 推出
    length = read(fd_read,buff,sizeof(buff));
    while (length > 0)
    {
        //大于0  表所读取成功写入文件
        write(fd_write,buff,length);
        //打印到控制台
        write(STDOUT_FILENO,buff,length);
        //清除数组厘米残留数据
        memset(buff,0,length);
        //再次读取数据
        length = read(fd_read,buff,sizeof(buff));
    }
    
    //判断最后的长度等一-1 就算错误  提示一下
    if(length == -1)
    {
        close(fd_read);
        close(fd_write);
        perror("可读文件读取失败");
        //这个会退出但是不会自己关闭文件流
        _exit(EXIT_FAILURE);
    }

    //关闭文件流 并且退出
    exit(EXIT_SUCCESS);
    
    

    return 0;
}

/*
#define	STDIN_FILENO	0	标准输入（控制台输入）的fd
#define	STDOUT_FILENO	1	标准输出（控制台输出）的fd
#define	STDERR_FILENO	2	标准的错误输出（控制台输出）的fd
*/